package com.pickerview.lib;

import java.util.List;

/**
 * Numeric Wheel adapter.
 */
public class NumericWheelAdapter implements WheelAdapter {
	
	/** The default min value */
	public static final int DEFAULT_MAX_VALUE = 9;

	/** The default max value */
	private static final int DEFAULT_MIN_VALUE = 0;
	
	// Values
	private int minValue;
	private int maxValue;
	
	// format
	private String format;
	private List<String> timeLs;
	
	/**
	 * Default constructor
	 */
	public NumericWheelAdapter() {
		this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE);
	}
	
	public NumericWheelAdapter(List<String> timeLs){
		this.timeLs = timeLs;
	}
	
	/**
	 * Constructor
	 * @param minValue the wheel min value
	 * @param maxValue the wheel max value
	 */
	public NumericWheelAdapter(int minValue, int maxValue) {
		this(minValue, maxValue, null);
	}

	/**
	 * Constructor
	 * @param minValue the wheel min value
	 * @param maxValue the wheel max value
	 * @param format the format string
	 */
	public NumericWheelAdapter(int minValue, int maxValue, String format) {
		this.minValue = minValue;
		this.maxValue = maxValue;
		this.format = format;
	}

	@Override
	public String getItem(int index) {
		if(null!=timeLs && !timeLs.isEmpty()){
			if (index >= 0 && index < getItemsCount()) {
				String value = timeLs.get(index);
				if(value.length()==1){
					return "0"+value;
				}else{
					return value;
				}
			}
		}else{
			if (index >= 0 && index < getItemsCount()) {
				int value = minValue + index;
				String str = Integer.toString(value);
				if(str.length()==1){
					return format != null ? String.format(format, "0"+value) : "0"+Integer.toString(value);
				}else{
					return format != null ? String.format(format, value) : Integer.toString(value);
				}
			}
		}
		return null;
	}

	@Override
	public int getItemsCount() {
		if(null!=timeLs && !timeLs.isEmpty()){
			return timeLs.size();
		}else{
		  return maxValue - minValue + 1;
		}
	}
	
	@Override
	public int getMaximumLength() {
	    int maxLen = 0;
		int max = 0;
		if(null!=timeLs && !timeLs.isEmpty()){
			maxLen = 5;
			if (minValue < 0) {
				maxLen++;
			}
		}else{
			max = Math.max(Math.abs(maxValue), Math.abs(minValue));
			maxLen = Integer.toString(max).length();
			if(maxLen==1){
				maxLen = maxLen+1;
			}
			if (minValue < 0) {
				maxLen++;
			}
		}
		return maxLen;
	}
}
